<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
    </style>
    <script src="../lib//three/three.js"></script>
    <script src="../lib//three/dat.gui.js"></script>
    <script src="../controls/index.js"></script>
</head>
<body>

</body>
</html>
<script>
    // 创建一个场景
    const scene = new THREE.Scene()
    // 创建一个相机 视点
    const camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 1, 1000);
    // 设置相机的位置
    camera.position.set(0, 0, 20)
    // 创建一个渲染器
    const renderer = new THREE.WebGLRenderer()
    // 设置渲染器尺寸
    renderer.setSize(window.innerWidth, window.innerHeight)
    document.body.appendChild(renderer.domElement)
    // 添加一个立方体
    const cubeGeometry = new THREE.BoxGeometry(1, 1, 1)
    // 创建材质
    const cubeMaterial = new THREE.MeshLambertMaterial({
        color: 0xff0000, wireframe: false
    })
    const cube = new THREE.Mesh(cubeGeometry, cubeMaterial)
    // 添加到场景里
    scene.add(cube)
    // 添加球体
    const sphereGeometry = new THREE.SphereGeometry(1, 10, 10)
    const sphereMaterial = new THREE.MeshLambertMaterial({
        color: 0x00ff00, wireframe: false
    })
    const sphere = new THREE.Mesh(sphereGeometry, sphereMaterial)
    sphere.position.x = 3
    sphere.position.y = 1
    scene.add(sphere)
    // 添加一个平面用来接收阴影
    const planeGeometry = new THREE.PlaneGeometry(20, 20)
    const planeMaterial = new THREE.MeshBasicMaterial({
        color: 0x999999
    })
    const plane = new THREE.Mesh(planeGeometry, planeMaterial)
    scene.add(plane)
    plane.rotateZ(20)
    plane.position.z = -10
    plane.position.x = 3
    // 让两个三维物体产生阴影，使用平面接收
    cube.castShadow = true
    sphere.castShadow = true
    plane.receiveShadow = true

    // 添加环境光
    const ambientLight = new THREE.AmbientLight(0x000000)
    scene.add(ambientLight)
    // 添加灯光
    const spotLight = new THREE.SpotLight(0xffffff)
    spotLight.position.set(-10, 10, 90)
    // 灯光开启阴影效果
    spotLight.castShadow = true
    // 渲染器支持阴影
    renderer.shadowMapEnabled = true
    scene.add(spotLight)
    initControls(ambientLight)
    const animation = () => {
        cube.rotation.x += 0.01
        cube.rotation.y += 0.01
        // 渲染
        renderer.render(scene, camera)
        requestAnimationFrame(animation)
    }
    animation()
</script>